package cn.exrick.xboot.modules.base.service.mybatis;

import cn.exrick.xboot.modules.base.entity.Role;
import cn.exrick.xboot.modules.base.entity.User;
import cn.exrick.xboot.modules.base.entity.UserRole;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * @author Exrickx
 */
@CacheConfig(cacheNames = "userRole")
public interface IUserRoleService extends IService<UserRole> {

    /**
     * 通过用户id获取
     * @param userId
     * @return
     */
    @Cacheable(key = "#userId")
    List<Role> findByUserId(@Param("userId") String userId);

    /**
     * 通过用户id获取用户角色关联的部门数据
     * @param userId
     * @return
     */
    @Cacheable(key = "'depIds:'+#userId")
    List<String> findDepIdsByUserId(String userId);

    /**
     * 通过roleId查询user
     * @param userRole
     * @return
     */
    public  List<UserRole> findUserRoleByRoleId(UserRole userRole);

    /**
     * 通过userId查询user
     * @param userRole
     * @return
     */
    List<UserRole> findUserRoleByUserId(UserRole userRole);

    /**
     * njp
     * 通过权限id获取用户名
     * @return
     * 2019.10.09
     */
    List<User>  findUsernamesByRoleId(@Param("roleId") String  roleId);

    /**
     * njp
     * 验证该用户是否是审批员
     * user中需要username
     * @return
     * 2019.10.15
     */
    boolean  getApprovalRole(User user);

    /**
     * njp add 20201109 portal二期
     * 通过用户id和角色类型（管理员/普通）获取
     * @param userId
     * @return
     */
    List<Role> findByUserIdAndType(@Param("userId") String userId,@Param("type") Integer type);


    /**
     * 删除用户管理角色(in )
     * @param
     */
    void deleteUserRoleInIds(User u);
}
